﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Web;
using System.Web.Mvc;
using VerumIT.Mvc.Models;

namespace VerumIT.Mvc.Controllers
{
    public class ContatoController : Controller
    {
        public ActionResult Index()
        {
            return View(new ContatoModel());
        }

        [HttpPost]
        public ActionResult Index(ContatoModel contatoModel)
        {
            if (ValidateModel(contatoModel))
            {
                contatoModel.Notificacao = EnviarEmail(contatoModel);

                TempData["mensagem"] = contatoModel.Notificacao.Mensagem;
            }

            return RedirectToAction("Index", "Contato", new ContatoModel());
        }

        private NotificacaoModel EnviarEmail(ContatoModel contatoModel)
        {
            var notificacao = new NotificacaoModel();

            try
            {
                if (!ValidaEmail(contatoModel.Email))
                {
                    notificacao.New("E-mail inválido!", TipoNotificacao.Erro);
                }
                else
                {
                    var message = new MailMessage { From = new MailAddress("william@verumit.com.br") };

                    message.To.Add(new MailAddress("contato@verumit.com.br"));
                    message.Subject = "[Verum IT] - Mensagem enviada por: " + contatoModel.Nome;
                    var msgCliente = "<HTML><HEAD><TITLE></TITLE>";
                    msgCliente += "<STYLE> ";
                    msgCliente += "body { color: #000000; font-family: Verdana; font-size: 10px; }";
                    msgCliente += ".linblue { color: #0000DC; }";
                    msgCliente += "</STYLE>";
                    msgCliente += "</HEAD><BODY>";
                    msgCliente += "<p class='linblue'> Olá! </p><br>";
                    msgCliente += "<p> O Cliente abaixo lhe enviou uma mensagem.</p>";
                    msgCliente += "<p> Nome: " + contatoModel.Nome + "</p>";
                    msgCliente += "<p> Email: " + contatoModel.Email + "</p>";
                    msgCliente += "<p> Assunto: " + contatoModel.Assuntos.FirstOrDefault(x => x.Value.Equals(contatoModel.Assunto)).Text + " </p>";
                    msgCliente += "<p> Mensagem: </p>";
                    msgCliente += "<p> " + contatoModel.Mensagem + "</p>";
                    msgCliente += "</BODY></HTML>";
                    message.IsBodyHtml = true;
                    message.Body = msgCliente;

                    var client = new SmtpClient
                    {
                        Host = "verumit.com.br",
                        Port = 587,
                        UseDefaultCredentials = false,
                        Credentials = new NetworkCredential("contato@verumit.com.br", "Verum!"),
                    };

                    client.Send(message);

                    notificacao.New("Recebemos o seu e-mail e responderemos assim que possível! Obrigado pelo contato!", TipoNotificacao.Sucesso);
                }
            }
            catch (Exception exception)
            {
                notificacao.New("Ocorreu um erro ao enviar o email. Tente novamente mais tarde", TipoNotificacao.Erro);
            }

            return notificacao;
        }

        private bool ValidaEmail(string email)
        {
            try
            {
                new MailAddress(email);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        private bool ValidateModel(ContatoModel contatoModel)
        {
            string msg = null;

            if (string.IsNullOrEmpty(contatoModel.Nome))
                msg = "O campo nome é obrigatório";
            else if (string.IsNullOrEmpty(contatoModel.Email))
                msg = "O campo email é obrigatório";
            else if (string.IsNullOrEmpty(contatoModel.Assunto))
                msg = "O campo email é assunto";
            else if (string.IsNullOrEmpty(contatoModel.Mensagem))
                msg = "O campo email é mensagem";

            TempData["mensagem"] = msg;

            return string.IsNullOrEmpty(msg);
        }

    }
}
